JQL: mixpanel で複雑な分析機能を使い始める – その3 動的キーによるグループ化 –
mixpanelではイベントやユーザーのデータにさまざまなプロパティがあります。 mixpanel側のデフォルトで用意されているものだったり、自身でSDKを使って追加したりすることも可能です。 JQLを使えばこういったものをキー(静的なキー)にして集計するなどを行えますが、静的なキーを元に計算等を行って集計するようなこともできるようになっています。
※ キーを計算する(動的なキー)
JQLではmain()
関数が必須となっていますが、動的なキーを扱うために、main()
以外の関数を定義(ヘルパー関数)して集計に使うことになります(main関数から呼び出す)
やってみる
メールアドレスのドメイン名を取得して集計
ドキュメントにも記載されている ユーザーの最も一般的なメールドメインのトップ 10 は?
というケースから試していきたいと思います。
JQL
function getEmailDomain(user) { var email = user.properties["$email"]; if (!email) { return undefined; } pos = email.indexOf('@'); if (pos < 0) { return undefined; } return email.substr(pos + 1); } function main() { return People() .groupBy([getEmailDomain], mixpanel.reducer.count()) .reduce(mixpanel.reducer.top(10)); }
上記のように、groupBy
という組み込み関数の引数に、getEmailDomain
という自作した関数を指定しています。
実行結果は以下
また、自作の関数と既存のプロパティの組み合わせも可能でした。
function main() { return People() .groupBy([getEmailDomain,'properties.$browser'], mixpanel.reducer.count()) .reduce(mixpanel.reducer.top(10)); }
groupByの第一引数に[getEmailDomain,'properties.$browser']
といった感じでproperties.$browser
を追加して、ドメインと使用ブラウザで集計しています。
結果は以下のようになります。 ブラウザの情報も出てますね(key0がドメイン、key1がブラウザ)。
リファラーから参照元をカスタマイズして集計
ユーザーやイベントデータの中に、デフォルトでReferrerやReferring Domain、Initial Referring Domain と言った参照元の情報が含まれます
このリファラーのドメインをグループ化したり、わかりやすい別名をつけたりしてカスタマイズし、集計することもできました。
function getReferringDomainType(user) { var domain = user.properties["$initial_referring_domain"]; if (!domain) { return undefined; } if(domain.search('(.*)google.([^/?]*)') === 0 ) { return 'Google' ; }else if(domain.search( 'cm-prd-support.zendesk.([^/?]*)') === 0){ return 'Zendesk Guide(OLD)' ; }else if(domain.search( 'cm-prod-support.zendesk.([^/?]*)') === 0){ return 'Zendesk Guide' ; }else if(domain.search( 'gtm-msr.appspot.com([^/?]*)') === 0){ return 'GTM' ; }else if(domain.search( '\\$direct') === 0){ return '直接' ; } return 'その他'; } function main() { return People() .groupBy([getReferringDomainType], mixpanel.reducer.count()) ; }
リファラーのドメインごとにタイプ分類をするサンプルコードを書いてみました。
実行してみると、
このように集計されました。
余計な情報を削ぎ落としてざっくりと集計したいといった時に使えるかもしれませんね。
外部ライブラリは使えるのか?
外部ライブラリを読み込んで使用することはできませんでした。
var request = require('request'); function main() { 〜〜〜〜〜 }
requireを書いて実行してみると、
Uncaught exception ReferenceError: require is not defined
というエラーが発生します。
※ JQLの裏では、Chromeで使われているJavaScriptエンジンであるV8が使われています。